package cn.shadow.module.login;

import cn.shadow.moulde.Modules;
import cn.shadow.utils.BufferUtil;
import io.netty.buffer.ByteBuf;

import static cn.shadow.utils.BufferUtil.newDynamicMessage;

/**
 * 登录
 * Created by CodeMaker
 * Created time: 2020-02-10 23:28:06
 */
public class LoginModuleMessages {
    public static final int MODULE_ID = Modules.LOGIN_MODULE_ID;

    /**
     * 附带utf的用户名, 存在就读取已有的账号, 不存在就新建个新的.
     * 失败返回S2C_LOGIN_BY_NAME_FAIL或者S2C_CREATE_USER_BY_NAME_FAIL
     * 成功返回S2C_LOGIN_SUCCESS, 附带User.writeTo
     */
    public static final int C2S_CREATE_OR_LOGIN_BY_NAME = 3;

    /**
     * 登录结果
     */
    public static final int S2C_LOGIN_RESULT = 4;

    public static ByteBuf requestLoginBuffer(String username) {
        ByteBuf buffer = newDynamicMessage(MODULE_ID, C2S_CREATE_OR_LOGIN_BY_NAME);

        BufferUtil.writeUTF(buffer, username); //登录结果

        return buffer;
    }

    public static ByteBuf createPlayerBuffer(String nickName) {
        ByteBuf buffer = newDynamicMessage(MODULE_ID, C2S_CREATE_PLAYER);
        BufferUtil.writeBoolean(buffer, true); //登录结果
        BufferUtil.writeUTF(buffer, nickName); //登录结果

        return buffer;
    }

    /**
     * 登录. 必须等待服务器返回. 且在收到返回前, 不能发送再发送任何消息
     * <p>
     * 失败返回 S2C_WEB_LOGIN_FAIL
     * 成功返回 S2C_LOGIN_SUCCESS
     * <p>
     * 附带
     * <p>
     * UTF auth
     * UTFBytes sign
     */
    public static final int C2S_WEB_LOGIN = 5;


    /**
     * 创建玩家角色
     * bool male  性别
     * string player_name 昵称
     */
    public static final int C2S_CREATE_PLAYER = 7;


    /**
     * 创建英雄失败
     * <p>
     * byte byte错误码
     * 1. 名字中存在非法字符
     * 2. 角色名已经存在
     * 3. 服务器内部错误
     * 4. 你已经有角色了
     * 5. 名字长度非法
     * 6. 创建玩家角色名，含敏感词
     */
    public static final int S2C_CREATE__PLAYER = 8;

}
